package com.it.a_jichu.e_数组;

/*
 * 数组
 * 【说明】：数组是一种容器，多个数据按照一定顺序的组合，可以存储一批同种类型的数据
 * 【组成】：数组名、下标(索引) 、元素、数组长度
 * 【特点】：
 *         1、组中的元素在内存中是依次紧密排列的，有序的、可以重复的
 *         2、数组是引用数据类型，数组中的元素可以是任何数据类型
 *         3、创建数组会在内存中开辟连续的空间。占据的空间的大小，取决于数组的长度和数组中元素的类型。
 *         4、数组，一旦初始化完成，其长度就是确定的。数组的长度一旦确定，就不能修改
 *         5、什么类型的数组只能存储在什么类型的数据
 * 【默认值】：通过动态初始化方式定义的数组、那该数组的默认值是什么？
 *         1、整数类型初始化值：0
 *         2. 浮点类型初始化值：0.0
 *         3、字符类型初始化值：0 或者 /u0000
 *         4、boolean类型初始化值：false
 *         5、引用类型初始化值：null
 *         问：动态初始化数组后元素的默认值是什么样的？
 *         答：byte、short、int、long 类型数组的元素默认值都是 0
 *         float 、 double 类型数组元素的默认值都是 0.0
 *         boolean 类型数组的元素默认值是 false
 *         String 类型数组的元素的默认值是 null
 *         问：两种数组定义的方法各自适合什么业务场景？
 *         答：动态初始化：适合开始不确定具体元素值，只知道元素个数的业务场景
 *         静态初始化：适合一开始就知道要存入哪些元素值的业务场景
 */

/*
 * 定义数组
 */
class Array01 {
    public void test() {
        /**
         * 静态初始化数组：
         * 【说明】：在程序中创建数组时，就给数组定义好数据，就叫静态初始化数 （数组的声明赋值同时进行）
         * 【语法】：数据类型[] 数组名称 = new 数据类型[]{数据值,数据值}
         */
        String[] a = new String[]{"张三", "李四", "王五"};
        System.out.println(a[1]);

        /**
         * 动态初始化（数组声明了、未给数组赋值）
         * 【说明】：声明一个数组、但未赋值、只定义了这个数组的长度（数组的声明赋值不同时进行）
         * 【语法】：类型[] 数组名 = new 类型[]{4}
         */
        int[] b = new int[4];
        System.out.println(b[1]); // null


        /**
         * 简写
         */
        int[] c = {3}; // 类型推断 (动态初始化)
        int[] d = {111, 222, 333}; // 类型推断（静态初始化）
    }
}


/**
 * 操作数组
 */
class Array02 {
    public void test() {
        String[] a = {"张三", "李四", "王五", "韩梅梅", "李雷",};
        /**
         * 访问
         */
        System.out.println(a[1]);


        /**
         * 赋值
         */
        a[2] = "刘德华";


        /**
         * 数组属性:length 获取数组长度
         */
        System.out.println(a.length);


        /**
         * 遍历数组
         */
        for (int i = 0; i < a.length; i++) {
            System.out.println(a[i]);
        }
    }
}


/**
 * 多维数组
 * 【说明】：多维数组就是数组中嵌套数组，数组作为元素存放在一个数组中
 */
class Array03 {
    public void test() {
        // 静态初始化
        int[][] a = new int[][]{{001, 002, 003}, {011, 022, 033,}};

        // 动态初始化
        int[][] b = new int[3][4];

        // 其他写法
        String[][] str4 = {{}, {}, {}};
    }
}

public class main {
    public static void main(String[] args) {
        System.out.println("========== 定义数组 ==========");
        new Array01().test();
        System.out.println("========== 操作数组 ==========");
        new Array02().test();
    }
}
